package cn.cl;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.po.TableFill;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import lombok.extern.slf4j.Slf4j;

import java.util.Arrays;


/**
 * 标题：代码生成器
 * 作者：何处是归程
 * 时间：2020/4/4 - 21:59
 */
@Slf4j
public class GaoClode {
	public static void main(String[] args) {
		// 需要构建一个代码生成器对象
		AutoGenerator mpg = new AutoGenerator();

		// 全局配置
		GlobalConfig gc = new GlobalConfig();
		// ------------------------------------------------------
		// ---------------- 注意 ： 需要自己填写 ---------------
		// ------------------------------------------------------
		String outPutDir = "Z:\\MyBatis-Plus\\mybatis-plus\\src\\main\\java\\";
		log.info("文件生成的位置为：" + outPutDir + "\n");
		gc
				// 生成路径
				.setOutputDir(outPutDir)
				// 作者名
				.setAuthor("归程")
				// 是否打开资源管理器
				.setOpen(false)
				// 是否覆盖
				.setFileOverride(false)
				//设置生成的service接口名首字母是否为I
				.setServiceName("%sService")
				// id生成策略
				.setIdType(IdType.ID_WORKER)
				// 日期格式
				.setDateType(DateType.ONLY_DATE)
				// 自动配置Swagger文档
				.setSwagger2(true);
		// 将全局配置放入代码生成器
		mpg.setGlobalConfig(gc);
		log.info("————————全局配置完成————————\n");

		// 设置数据源
		DataSourceConfig dataSource = new DataSourceConfig();
		dataSource
				.setUrl("jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&characterEncoding=UTF-8&serverTimezone=UTC")
				.setDriverName("com.mysql.cj.jdbc.Driver")
				.setUsername("root")
				.setPassword("070313")
				.setDbType(DbType.MYSQL);
		// 将数据源放入代码生成器
		mpg.setDataSource(dataSource);
		log.info("————————数据源配置完成————————\n");

		// 包的配置
		PackageConfig packageConfig = new PackageConfig();
		packageConfig
				.setModuleName(null)
				.setParent("cn.cl")
				.setEntity("pojo")
				.setMapper("mapper")
				.setService("service")
				.setController("controller");
		// 将包配置放入代码生成器
		mpg.setPackageInfo(packageConfig);
		log.info("————————包配置完成————————\n");

		// 策略配置
		StrategyConfig strategyConfig = new StrategyConfig();
		strategyConfig
				// ------------------------------------------------------
				// ---------------- 注意 ： 需要自己填写 ---------------
				// ------------------------------------------------------
				// 要映射的表名
				.setInclude("user")
				.setNaming(NamingStrategy.underline_to_camel)
				.setColumnNaming(NamingStrategy.underline_to_camel)
				// 自动生成Lombok
				.setEntityLombokModel(true)
				// 删除策略
				.setLogicDeleteFieldName("deleted")
				// 自动填充配置
				.setTableFillList(
						Arrays.asList(
								new TableFill("createTime", FieldFill.INSERT),
								new TableFill("updateTime", FieldFill.INSERT_UPDATE)
						)
				)
				// 乐观锁配置
				.setVersionFieldName("version")
				// 开启驼峰命名
				.setRestControllerStyle(true)
				// url下划线命名
				.setControllerMappingHyphenStyle(true);
		// 将策略配置放入代码生成器
		mpg.setStrategy(strategyConfig);
		log.info("————————策略配置完成————————\n");

		// 启动代码生成器
		mpg.execute();
	}
}
